import { IPSDataEntityObject } from '../ipsdata-entity-object';
import { IPSDELogicBase } from './ipsdelogic-base';
import { IPSDELogicNode } from './ipsdelogic-node';
import { IPSDELogicParam } from './ipsdelogic-param';
import { IPSSysSFPlugin } from '../../res/ipssys-sfplugin';

/**
 *
 * 子接口类型识别属性[logicSubType]
 * @export
 * @interface IPSDELogic
 */
export interface IPSDELogic extends IPSDataEntityObject, IPSDELogicBase {
  /**
   * 调试模式
   * @description 值模式 [实体逻辑调试模式] {0：不启用、 1：信息输出 }
   * @type {( number | 0 | 1)}
   * @default 0
   */
  debugMode: number | 0 | 1;

  /**
   * 默认参数名称
   * @type {string}
   */
  defaultParamName: string;

  /**
   * 逻辑子类
   * @description 值模式 [逻辑子类] {NONE：无、 DEFIELD：属性逻辑、 USER：用户自定义、 USER2：用户自定义2、 USER3：用户自定义3、 USER4：用户自定义4 }
   * @type {( string | 'NONE' | 'DEFIELD' | 'USER' | 'USER2' | 'USER3' | 'USER4')}
   * @default NONE
   */
  logicSubType: string | 'NONE' | 'DEFIELD' | 'USER' | 'USER2' | 'USER3' | 'USER4';

  /**
   * 逻辑处理集合
   *
   * @type {IPSDELogicNode[]}
   */
  getPSDELogicNodes(): IPSDELogicNode[] | null;

  /**
   * 逻辑处理集合
   *
   * @type {IPSDELogicNode[]}
   */
  get psDELogicNodes(): IPSDELogicNode[] | null;

  findPSDELogicNode(objKey: any): IPSDELogicNode | null;

  /**
   * 逻辑参数集合
   *
   * @type {IPSDELogicParam[]}
   */
  getPSDELogicParams(): IPSDELogicParam[] | null;

  /**
   * 逻辑参数集合
   *
   * @type {IPSDELogicParam[]}
   */
  get psDELogicParams(): IPSDELogicParam[] | null;

  findPSDELogicParam(objKey: any): IPSDELogicParam | null;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;

  /**
   * 脚本代码
   * @type {string}
   */
  scriptCode: string;

  /**
   * 开始处理节点
   *
   * @type {IPSDELogicNode}
   */
  getStartPSDELogicNode(): IPSDELogicNode | null;

  /**
   * 开始处理节点
   *
   * @type {IPSDELogicNode}
   */
  get startPSDELogicNode(): IPSDELogicNode | null;

  /**
   * 开始处理节点（必须存在）
   *
   * @type {IPSDELogicNode}
   */
  getStartPSDELogicNodeMust(): IPSDELogicNode;

  /**
   * 自定义脚本代码
   * @type {boolean}
   * @default false
   */
  customCode: boolean;

  /**
   * 支持后台执行
   * @type {boolean}
   */
  enableBackend: boolean;

  /**
   * 支持前台执行
   * @type {boolean}
   */
  enableFront: boolean;
}
